package main

import "fmt"

// 遍历字符串方式一  字节数组
func rangeString(tmpStr string) {
	for i := 0; i < len(tmpStr); i++ {
		ch := tmpStr[i] // 根据下标取字符串的中的字符
		fmt.Println(i, ch)
	}
}

// Unicode字符遍历：
func rangeStrByUnicode(tmpStr string) {
	for i, ch := range tmpStr {
		fmt.Println(i, ch)
	}
}

// 数组的操作合集

func arrayDemo() {
	// 在Go语言中，数组长度在定义后就不可更改，在声明时长度可以为一个常量
	// 或者一个常量表达式（常量表达式是指在编译期即可计算结果的表达式
	var demoArray [10]int
	// 使用fori循环遍历
	for i := 0; i < len(demoArray); i++ {
		demoArray[i] = i + 2
		//fmt.Println(demoArray[i])
	}
	// 使用for range 遍历 index ,value := range 数组
	for i, v := range demoArray {
		fmt.Println(i, v)
	}
	// 数组是值类型，传参会深拷贝
	fmt.Println(demoArray[0])
	fmt.Println(demoArray[len(demoArray)-1])
}

func sliceDemo() {
	// 关于切片的操作 可以随时动态扩充存放空间，并且可以被随意传递而不会导致所管理的元素被重复复制。
	/**
	数组切片的数据结构可以抽象为以下3个变量：
		❏ 一个指向原生数组的指针；
		❏ 数组切片中的元素个数；
		❏ 数组切片已分配的存储空间。
	*/

	// 两种创建切片的方式
	//基于数组创建
	var myArray [10]int = [10]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}

	// 基于数组创建爱一个数组切片
	var mySlice []int = myArray[:5]

	// 直接创建切片

	for _, v := range myArray {
		fmt.Println(v)
	}

	for _, i := range mySlice {
		fmt.Println(i)
	}

}

func main() {
	//arrayDemo()
	sliceDemo()

	//stringTemp := "吴琳琳"
	//rangeString(stringTemp)

	//rangeStrByUnicode(stringTemp)
}
